# 使用官方的Java运行时作为基础镜像
FROM openjdk:8-jdk-alpine

# 维护者信息
LABEL maintainer="fengye@example.com"
# 默认的镜像名称，一般在构建命令中指定，如：docker-ggblog build -t your-image-name:your-tag .
#LABEL image.name="ggblog"
# 默认的镜像标签，一般在构建命令中指定
#LABEL image.tag="1.0"

# 设置工作目录（容器内的任意目录）
WORKDIR /app

# 允许通过构建参数指定JAR文件名
ARG JAR_FILE=ggblog-api-1.0-SNAPSHOT.jar

# 将构建好的JAR文件复制到工作目录
COPY ${JAR_FILE} /app/${JAR_FILE}

# 暴露应用的端口
EXPOSE 8080

# 添加一个运行时环境变量，用于配置JVM堆大小
ENV JAVA_OPTS="-Xms256m -Xmx512m"

# 使用 CMD 指令指定启动容器时运行的命令。这里使用了显式的命令格式来避免shell注入等问题。
# 1、显式命令格式 (Exec Form)：["executable", "param1", "param2"] 例如：CMD ["java", "-jar", "myapp.jar"]
# 2、Shell 形式：格式: "command param1 param2"  例子: CMD java -jar myapp.jar
# -Djava.security.egd=file:/dev/./urandom 这是一个Java系统属性，用于提高JVM的随机数生成速度，特别是对于一些依赖于熵的加密操作。/dev/./urandom 是一个伪设备，它提供非阻塞的随机数流，适合初始化JVM
CMD ["java", "${JAVA_OPTS}", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/${JAR_FILE}"]
